package com.czg.jsonschema2lombokpojo.config;

import com.czg.jsonschema2lombokpojo.SourceType;
import com.czg.jsonschema2lombokpojo.util.JavaVersion;

/**
 * 生成配置，返回所有行为选项的默认值。
 */
public class CustomGenerationConfig implements GenerationConfig {

    @Override
    public boolean isIncludeEqualsAndHashCode() {
        return true;
    }

    @Override
    public boolean isIncludeNoArgsConstructor() {
        return true;
    }

    @Override
    public boolean isIncludeAllArgsConstructor() {
        return true;
    }

    @Override
    public boolean isIncludeBuilder() {
        return true;
    }

    @Override
    public boolean isFieldNameConstants() {
        return true;
    }

    @Override
    public boolean isIncludeAccessors() {
        return false;
    }

    @Override
    public boolean getAccessorsFluentValue() {
        return false;
    }

    @Override
    public boolean getAccessorsChainValue() {
        return true;
    }

    @Override
    public String getAccessorsPrefix() {
        return null;
    }

    @Override
    public boolean isEnumIncludeGetter() {
        return true;
    }

    @Override
    public boolean isEnumIncludeAllArgsConstructor() {
        return true;
    }

    /**
     * 获取属性词分隔符
     * @return 一个空数组（即没有单词分隔符）
     */
    @Override
    public char[] getPropertyWordDelimiters() {
        return new char[] { '-', ' ', '_' };
    }

    /**
     * 是否使用长整数
     * @return <code>false</code>
     */
    @Override
    public boolean isUseLongIntegers() {
        return false;
    }

    /**
     * 是否使用双精度数字
     * @return <code>true</code>
     */
    @Override
    public boolean isUseDoubleNumbers() {
        return true;
    }

    /**
     * 是否使用标题作为类名
     * @return {@code false}
     */
    @Override
    public boolean isUseTitleAsClassname() {
        return false;
    }

    /**
     * 是否包含Jsr303注解
     * @return <code>false</code>
     */
    @Override
    public boolean isIncludeValidationAnnotations() {
        return true;
    }

    /**
     * 获得源类型
     * @return {@link SourceType#JSONSCHEMA}
     */
    @Override
    public SourceType getSourceType() {
        return SourceType.JSONSCHEMA;
    }

    /**
     * 是否使用可序列化
     * @return <code>false</code>
     */
    @Override
    public boolean isSerializable() {
        return false;
    }

    /**
     * 是否初始化集合
     * @return <code>true</code>
     */
    @Override
    public boolean isInitializeCollections() {
        return true;
    }

    /**
     * 类名前缀
     * @return
     */
    @Override
    public String getClassNamePrefix() {
        return "";
    }

    /**
     * 类名后缀
     * @return
     */
    @Override
    public String getClassNameSuffix() {
        return "";
    }

    /**
     * 文件扩展名
     * @return
     */
    @Override
    public String[] getFileExtensions() {
        return new String[] {};
    }

    /**
     * 是否使用大整数
     *
     * @return <code>false</code>
     */
    @Override
    public boolean isUseBigIntegers() {
        return false;
    }

    /**
     * 是否使用大的小数
     * @return <code>false</code>
     */
    @Override
    public boolean isUseBigDecimals() {
        return false;
    }



    /**
     * 是否包含附加属性
     * @return <code>true</code>
     */
    @Override
    public boolean isIncludeAdditionalProperties() {
        return true;
    }


    /**
     * Java目标版本
     * @return 当前JVM版本
     */
    @Override
    public String getTargetVersion() {
        return JavaVersion.parse(System.getProperty("java.version"));
    }

    /**
     * 是否格式化日期时间
     * @return <code>false</code>
     */
    @Override
    public boolean isFormatDateTimes() {
        return false;
    }

    /**
     * 是否格式化日期
     * @return <code>false</code>
     */
    @Override
    public boolean isFormatDates() {
        return false;
    }


    /**
     * 引用片段路径分隔符
     * @return "#/."
     */
    @Override
    public String getRefFragmentPathDelimiters() {
        return "#/.";
    }

    /**
     * 自定义日期schema
     * @return
     */
    @Override
    public String getCustomDatePattern() {
        return null;
    }

    /**
     * 自定义时间schema
     * @return
     */
    @Override
    public String getCustomTimePattern() {
        return null;
    }

    /**
     * 自定义日期时间schema
     * @return
     */
    @Override
    public String getCustomDateTimePattern() {
        return null;
    }


    /**
     * 是否使用JakartaValidation
     * @return {@code false}
     */
    @Override
    public boolean isUseJakartaValidation() {
        return false;
    }

    @Override
    public boolean isEnumInSubPackage() {
        return false;
    }

    @Override
    public boolean isEnumTypeAddSuffix() {
        return false;
    }
}
